package com.mindskip.xzs.configuration.aop;

import com.mindskip.xzs.base.SystemCode;
import com.mindskip.xzs.exception.BusinessException;
import com.mindskip.xzs.utility.RateLimiter;
import org.apache.ibatis.builder.BuilderException;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

/**
 * @Description: 所有业务接口的增强器(在调用Controller方法之前，我们首先就是先去调用限流类中的方法)
 */
@Aspect
@Component
public class AllControllerRateLimiter {
    //定义前置通知
    //在调用Controller方法之前，我们首先就是先去调用限流类中的方法
    @Before("execution(* com.mindskip.xzs.controller.*.*(..))")
    public void before(JoinPoint joinPoint) {
        // 逻辑代码
        if(RateLimiter.tryAcquire()){
            //不做任何处理
        }else{
            throw new BusinessException(SystemCode.RequestLimit.getCode(),SystemCode.RequestLimit.getMessage());
        }
    }

}
